/**
 * 新的配置系统类型定义
 * 提供强类型支持和清晰的数据结构
 */

/**
 * 技能配置接口
 * 与现代技能系统字段映射保持一致
 * 基于 ISkillConfig (SkillFieldDefinitions.ts) 进行对齐
 */
export interface SkillConfig {
    /** 技能唯一标识 (对应 ISkillConfig.id) */
    skillId: string;
    
    // === 核心字段（与现代技能系统完全对齐） ===
    /** 技能名称 (对应 ISkillConfig.name) */
    name?: string;
    /** 显示名称（可选，用于重命名，向后兼容字段） */
    reName?: string;
    /** 技能描述 (对应 ISkillConfig.description) */
    description?: string;
    /** 技能描述（向后兼容字段） */
    desc?: string;
    /** 技能类型 (对应 ISkillConfig.type) */
    type?: 'active' | 'passive' | 'aura';
    /** 目标类型列表 (对应 ISkillConfig.targetTypes) */
    targetTypes?: string[];
    /** 冷却时间（回合数） (对应 ISkillConfig.cooldown) */
    cooldown?: number;
    
    // === 等级和经验系统 ===
    /** 当前等级 (对应 ISkillConfig.level) */
    level?: number;
    /** 最大等级 (对应 ISkillConfig.maxLevel) */
    maxLevel?: number;
    /** 技能经验值 (对应 ISkillConfig.exp) */
    exp?: number;
    /** 使用次数 (对应 ISkillConfig.useCount) */
    useCount?: number;
    
    // === 品质和分类系统 ===
    /** 技能品质 (对应 ISkillConfig.quality) */
    quality?: number;
    /** 技能分类 (对应 ISkillConfig.classType) */
    category?: string;
    /** 技能分类（向后兼容字段） */
    classType?: string;
    /** 是否可购买 (对应 ISkillConfig.notBuy) */
    notBuy?: boolean;
    
    // === 效果和数据系统 ===
    /** 技能效果列表 (对应 ISkillConfig.effect) */
    effects?: string[];
    /** 技能效果（向后兼容字段） */
    effect?: string[];
    /** 技能数据列表 (对应 ISkillConfig.data) */
    data?: ISkillEffectData[];
    /** 永久提升配置 (对应 ISkillConfig.permanentBoost) */
    permanentBoost?: IPermanentBoostConfig;
    /** Buff配置列表 (对应 ISkillConfig.buffs) */
    buffs?: IBuffConfig[];
    
    // === 扩展配置 ===
    /** 触发条件配置 */
    triggerConditions?: Record<string, any>;
    /** 技能标签 */
    tags?: string[];
    /** 前置条件 */
    prerequisites?: string[];
    /** 自定义数据 */
    customData?: Record<string, any>;
}

/**
 * 技能效果数据接口
 * 对应现代技能系统的 ISkillEffectData
 */
export interface ISkillEffectData {
    /** 攻击范围倍数 */
    attRange?: number;
    /** 固定伤害/效果值 */
    fixed?: number;
    /** 护盾值 */
    shield?: number;
    /** 治疗量 */
    healing?: number;
    /** 属性修改 */
    attributeModify?: Record<string, number>;
    /** 状态效果 */
    statusEffect?: IStatusEffectConfig;
    /** 永久提升配置 */
    permanentBoost?: IPermanentBoostConfig;
    /** 自定义参数 */
    [key: string]: any;
}

/**
 * 永久提升配置接口
 * 对应现代技能系统的 IPermanentBoostConfig
 */
export interface IPermanentBoostConfig {
    /** 提升类型 */
    type: string;
    /** 提升数值 */
    amount: number;
    /** 最大提升次数 */
    maxBoosts?: number;
    /** 触发条件 */
    condition?: string;
    /** 条件参数 */
    conditionParams?: Record<string, any>;
    /** 条件描述 */
    conditionDesc?: string;
}

/**
 * Buff配置接口
 * 对应现代技能系统的 IBuffConfig
 */
export interface IBuffConfig {
    /** Buff唯一标识 */
    id: string;
    /** 持续时间 */
    duration: number;
    /** 最大层数 */
    maxStacks?: number;
    /** 效果数值 */
    value?: number;
}

/**
 * 状态效果配置接口
 * 对应现代技能系统的 IStatusEffectConfig
 */
export interface IStatusEffectConfig {
    /** 状态类型 */
    type: string;
    /** 持续时间 */
    duration: number;
    /** 效果强度 */
    intensity?: number;
}

/**
 * 附魔条件接口
 */
export interface EnchantCondition {
    /** 最低等级要求 */
    minLevel?: number;
    /** 需要的血统 */
    requiredTalent?: string;
    /** 需要的任务完成状态 */
    requiredQuest?: string;
    /** 自定义条件检查函数名 */
    customCheck?: string;
}

/**
 * 可附魔技能池配置
 */
export interface EnchantableSkillPool {
    /** 技能配置 */
    skill: SkillConfig;
    /** 随机权重 */
    weight: number;
    /** 附魔条件 */
    conditions?: EnchantCondition;
    /** 最大数量限制 */
    maxCount?: number;
}

/**
 * 专属技能解锁配置
 */
export interface ExclusiveSkillUnlock {
    /** 技能配置 */
    skill: SkillConfig;
    /** 解锁条件 */
    unlock: {
        type: 'quest' | 'achievement' | 'event' | 'custom';
        requirement: string;
        description?: string;
    };
}

/**
 * 技能升级配置
 * 定义技能升级的路径和条件
 */
export interface SkillUpgradeConfig {
    /** 升级后的技能ID */
    upgradedSkillId: string;
    /** 升级条件 */
    requirements: {
        /** 当前技能等级要求 */
        currentLevel: number;
        /** 需要的材料或道具 */
        materials?: Array<{
            itemId: string;
            count: number;
        }>;
        /** 需要的金币 */
        gold?: number;
        /** 需要的经验值 */
        exp?: number;
        /** 玩家等级要求 */
        playerLevel?: number;
        /** 前置技能要求 */
        prerequisiteSkills?: Array<{
            skillId: string;
            minLevel: number;
        }>;
        /** 其他条件 */
        custom?: Record<string, any>;
    };
    /** 升级后的属性提升 */
    improvements: {
        /** 伤害提升百分比 */
        damageIncrease?: number;
        /** 冷却时间减少 */
        cooldownReduction?: number;
        /** 效果持续时间增加 */
        durationIncrease?: number;
        /** 命中率提升 */
        accuracyBonus?: number;
        /** 暴击率提升 */
        criticalBonus?: number;
        /** 其他属性提升 */
        custom?: Record<string, number>;
    };
    /** 升级成本 */
    cost?: {
        /** 金币成本 */
        gold?: number;
        /** 经验成本 */
        exp?: number;
        /** 时间成本（秒） */
        time?: number;
    };
    /** 升级描述 */
    description?: string;
}

/**
 * 技能树配置
 * 定义技能的进阶路径和分支
 */
export interface SkillTreeConfig {
    /** 技能树ID */
    treeId: string;
    /** 技能树名称 */
    name: string;
    /** 技能树描述 */
    description: string;
    /** 技能树类型 */
    type: 'class' | 'general' | 'special';
    /** 适用职业（如果是职业技能树） */
    applicableClasses?: string[];
    /** 根技能 */
    rootSkill: SkillConfig;
    /** 技能分支 */
    branches: Array<{
        /** 分支ID */
        branchId: string;
        /** 分支名称 */
        name: string;
        /** 分支描述 */
        description: string;
        /** 分支类型 */
        branchType: 'primary' | 'secondary' | 'advanced';
        /** 分支技能列表 */
        skills: SkillConfig[];
        /** 分支解锁条件 */
        unlockCondition?: {
            type: 'level' | 'quest' | 'achievement' | 'prerequisite';
            requirement: string;
            description?: string;
        };
        /** 分支前置要求 */
        prerequisites?: Array<{
            type: 'skill' | 'branch' | 'level';
            target: string;
            minLevel?: number;
        }>;
    }>;
    /** 最大分支数量 */
    maxBranches?: number;
    /** 技能点上限 */
    maxSkillPoints?: number;
    /** 解锁等级 */
    unlockLevel?: number;
    /** 是否启用 */
    enabled?: boolean;
    /** 版本 */
    version?: string;
}

/**
 * 技能效果配置扩展
 * 定义更复杂的技能效果类型
 */
export interface AdvancedSkillEffectConfig {
    /** 效果ID */
    id: string;
    /** 效果名称 */
    name: string;
    /** 效果类型 */
    type: 'damage' | 'heal' | 'buff' | 'debuff' | 'control' | 'utility';
    /** 效果子类型 */
    subType?: string;
    /** 计算公式 */
    formula?: string;
    /** 基础数值 */
    baseValue: number;
    /** 等级缩放系数 */
    levelScaling?: number;
    /** 属性缩放配置 */
    attributeScaling?: Record<string, number>;
    /** 条件配置 */
    conditions?: Array<{
        type: string;
        value: any;
        operator?: '>' | '<' | '=' | '>=' | '<=' | '!=';
    }>;
    /** 随机因子 */
    randomFactor?: {
        min: number;
        max: number;
    };
    /** 特殊标记 */
    tags?: string[];
}

/**
 * 技能配置集合扩展
 * 用于管理完整的技能系统配置
 */
export interface SkillSystemConfig {
    /** 版本号 */
    version: string;
    /** 最后更新时间 */
    lastUpdated: number;
    /** 技能列表 */
    skills: SkillConfig[];
    /** 技能树列表 */
    skillTrees: SkillTreeConfig[];
    /** 升级配置 */
    upgradeConfigs: Record<string, SkillUpgradeConfig>;
    /** 效果配置 */
    effectConfigs: Record<string, AdvancedSkillEffectConfig>;
    /** 全局设置 */
    globalSettings: {
        /** 最大技能等级 */
        maxSkillLevel: number;
        /** 最大技能数量 */
        maxSkillCount: number;
        /** 经验计算公式 */
        expFormula: string;
        /** 升级消耗公式 */
        costFormula: string;
    };
    /** 元数据 */
    metadata?: {
        author?: string;
        description?: string;
        changelog?: string[];
    };
}

/**
 * 技能池配置
 */
export interface SkillPools {
    /** 固有技能 - 装备创建时必定拥有 */
    inherent: SkillConfig[];
    /** 可附魔技能池 - 通过附魔获得 */
    enchantable: EnchantableSkillPool[];
    /** 专属技能 - 特殊条件解锁 */
    exclusive?: ExclusiveSkillUnlock[];
}

/**
 * 属性配置接口
 */
export interface AttributeConfig {
    /** 属性名称 */
    key: string;
    /** 最小值 */
    min: number;
    /** 最大值 */
    max: number;
    /** 增长类型 */
    growthType?: 'linear' | 'exponential' | 'logarithmic';
    /** 品质影响系数 */
    qualityMultiplier?: number;
}

/**
 * 装备模板配置接口
 */
export interface EquipmentTemplate {
    /** 装备ID */
    id: string;
    /** 装备名称 */
    name: string;
    /** 体系 */
    sys: string;
    /** 类型 */
    type: string;
    /** 职业 */
    job: string;
    /** 部位 */
    solt: string;
    /** 图标 */
    icon: string;
    /** 表情符号 */
    emoji: string;
    /** 描述 */
    desc?: string;
    /** 来源 */
    source?: string;
    
    /** 品质范围 */
    quality: {
        min: number;
        max: number;
        weights?: number[]; // 各品质的权重分布
    };
    
    /** 基础属性配置 */
    baseAttributes: AttributeConfig[];
    
    /** 技能池配置 */
    skillPools: SkillPools;
    
    /** 创建者 */
    creator?: string;
    /** 版本号 */
    version?: string;
    /** 是否启用 */
    enabled?: boolean;
    /** 标签 */
    tags?: string[];
}

/**
 * 配置集合接口
 */
export interface ConfigCollection<T> {
    /** 版本号 */
    version: string;
    /** 最后更新时间 */
    lastUpdated: number;
    /** 配置数据 */
    data: T[];
    /** 元数据 */
    metadata?: {
        author?: string;
        description?: string;
        changelog?: string[];
    };
}

/**
 * 配置验证结果
 */
export interface ConfigValidationResult {
    /** 是否有效 */
    isValid: boolean;
    /** 错误信息 */
    errors: string[];
    /** 警告信息 */
    warnings: string[];
    /** 验证的配置数量 */
    validatedCount: number;
}

/**
 * 配置导出选项
 */
export interface ConfigExportOptions {
    /** 导出格式 */
    format: 'json' | 'typescript' | 'yaml';
    /** 是否压缩 */
    minify?: boolean;
    /** 是否包含注释 */
    includeComments?: boolean;
    /** 导出路径 */
    outputPath?: string;
}
